4.4 Unicode 属性转义
Unicode 属性转义支持根据 Unicode 属性进行匹配,例如我们可以用它来匹配出表情、标点符号、字母(甚至适用特定语言或文字)等。同一符号可以拥有多种 Unicode 属性,属性则有 binary ("boolean-like") 和 non-binary 之分。
Letter
L
其他
Script
某些语言使用不同的文字,如英语和西班牙语使用拉丁文,而阿拉伯语和俄语用阿拉伯文和俄文。Script 和 Script_Extensions Unicode 属性允许正则表达式根据字符所属的文字或该文字所属的文字扩充进行匹配。
比如,"a" 属于拉丁(Latin)文,"ε" 属于希腊(Greek)文,"Л"属于西里尔(Cyrillic)文,"何"属于中文。
匹配拉丁文
匹配希腊文
匹配西里尔文
匹配中文
Script_Extensions
某字符用于多种文字时,Script 优先匹配最主要使用那个字符的文字。如果想要根据非主要的文字进行匹配,我们可以使用 Script_Extensions 属性。
比如: {texts.Script_Extensions} 是阿拉伯-印度符号中的数字 2,虽然它主要用阿拉伯文字书写,但也可以用塔安那 (Thaana) 文字书写,在使用 Script=Thaana 时无法匹配到结果,但在使用 Script_Extensions=Thaana 就可以匹配到结果。
使用 Script
使用 Script_Extensions
属性转义 VS 字符类
JavaScript 正则表达式可以使用 字符类 尤其是 \w 或 \d 匹配字母或数字,然而,这样的形式只匹配拉丁文字的字符 (换言之,a 到 z、 A 到 Z 的 \w 和 0 到 9 的 \d ),见例子,这样的使用放到非拉丁文本中是有些蠢的。
Unicode 属性转义 categories 包含更多字符, \p{Letter} 或 \p{Number} 将会适用于任何文字。
使用字符类
使用属性转义
上面使用字符类和使用属性转义的结果是一样的,但使用属性转义可以让模式简洁的多。